package aufgabe2;

public class Matrix {

	/**
	 * Erzeugt eine n * m Matrix der ArrayImplementation.
	 * @param zeilen Anzahl der Matrix
	 * @param spalten Anzahl der Matrix
	 * @return Eine Leere n * m Matrix des ArrayTyps
	 */
	public static ImplementationMathMatrix getMatrixOfArray(int zeilen, int spalten){
		InterfaceMatrix newMatrix = new ImplementationMatrixArray(zeilen, spalten);
		ImplementationMathMatrix newImpMatrix = new ImplementationMathMatrix(newMatrix);
		return newImpMatrix;
	}
	
	/**
	 * Erzeugt eine n * m Matrix der ArrayListImplementation.
	 * @param zeilen Anzahl der Matrix
	 * @param spalten Anzahl der Matrix
	 * @return Eine Leere n * m Matrix des ArrayListTyps
	 */
	public static ImplementationMathMatrix getMatrixOfArrayList(int zeilen, int spalten){
		InterfaceMatrix newMatrix = new ImplementationMatrixArrayList(zeilen, spalten);
		ImplementationMathMatrix newImpMatrix = new ImplementationMathMatrix(newMatrix);
		return newImpMatrix;
	}
	
	/**
	 * Erzeugt eine n * m Matrix der ArrayImplementation.
	 * @param zeilen Anzahl der Matrix
	 * @param spalten Anzahl der Matrix
	 * @return Eine Leere n * m Matrix des ListTyps
	 */
	public static ImplementationMathMatrix getMatrixOfList(int zeilen, int spalten){
		InterfaceMatrix newMatrix = new ImplementationMatrixList(zeilen, spalten);
		ImplementationMathMatrix newImpMatrix = new ImplementationMathMatrix(newMatrix);
		return newImpMatrix;
	}
	
	/**
	 * Erzeugt eine n * m Matrix der angegebenen Implementation.
	 * @param matrix Gewuenschter typ der Matrix
	 * @param zeilen Anzahl der Matrix
	 * @param spalten Anzahl der Matrix
	 * @return Eine Leere n * m Matrix des Matrix Typs
	 */
	public static ImplementationMathMatrix getMatrixOfType(ImplementationMathMatrix matrix, int zeilen, int spalten){
		ImplementationMathMatrix newImpMatrix = matrix.getNewMatrix(zeilen, spalten);
		return newImpMatrix;
	}
}
